package com.hnyyac.ad.mds.manager

import android.app.Activity
import android.content.Context
import android.util.Log
import android.view.ViewGroup
import android.widget.Toast
import androidx.fragment.app.FragmentActivity
import com.hnyyac.ad.mds.GMAds
import com.hnyyac.ad.mds.IAdType
import com.hnyyac.ad.mds.IAdView
import com.hnyyac.ad.mds.IAdViewListener

import com.hnyyac.ad.mds.views_load.RealInnerAdListener
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch

object AdManager  {
    private val defaultAdViewListener = RealInnerAdListener()
    /**
     * 加载chapin广告(2个)
     */
    fun loadTwoChapin(activity: Activity,position: Int, listener: IAdViewListener,adLoadListener: AdLoadListener) {
        GMAds.loadAd(activity,position, IAdType.interstitial).observeForever { ad ->
            if (ad != null) {
                 ad.setOnShowingListener(listener)
                 ad.show(activity)

               // loadChapin(contentLayoutIndex, context, listener)
            } else {
                adLoadListener.onAdLoadFailed(null) // 广告加载失败，回调接口
            }
        }
    }

    /**
     * 加载单个插屏
     */
    fun loadChapin(activity: Activity,position:Int, listener: IAdViewListener?=defaultAdViewListener, adLoadListener: AdLoadListener) {
        Log.e("qin", "开始加载插屏广告")
        val randomDelay = (200..1000).random().toLong()

        // 使用协程延迟执行
        CoroutineScope(Dispatchers.Main).launch {
            delay(randomDelay) // 非阻塞延迟
            GMAds.loadAd(activity,position, IAdType.interstitial ).observeForever { ad ->
                if (ad != null) {
                    ad.setOnShowingListener(listener)
                    ad.show(activity)
                    // loadChapin(contentLayoutIndex, context, listener)
                } else {
                    adLoadListener.onAdLoadFailed(null) // 广告加载失败，回调接口
                }
            }
        }

    }

    /**
     * 加载单个视频
     */
    fun loadVideo( activity: Activity, position: Int,listener: IAdViewListener=defaultAdViewListener,adLoadListener: AdLoadListener) {
        Log.e("qin", "开始加载视频广告")
        GMAds.loadAd(activity, position , IAdType.reward_video).observeForever { ad ->
            if (ad != null) {
                ad.setOnShowingListener(listener)
                ad.show(activity)
                // loadChapin(contentLayoutIndex, context, listener)
            } else {
                adLoadListener.onAdLoadFailed(null) // 广告加载失败，回调接口
            }
        }

    }
    /**
     * 尝试同时展示两个插屏广告
     */
    fun loadTwoChapinSimultaneously(
        activity: Activity,
        position: Int,
        listener: IAdViewListener,
        adLoadListener: AdLoadListener
    ) {
        // 记录最后展示的广告
        var lastShownAd: IAdView? = null
        // 标记是否已经有广告展示成功
        var hasAdShown = false
        // 内部关闭事件监听器
        val internalCloseListener = object : IAdViewListener {

            override fun onTrigger(adView: IAdView) {

            }

            override fun onAdShow(adView: IAdView) {

            }

            override fun onAdClick(adView: IAdView) {

            }

            override fun onAdClose(adView: IAdView) {
                // 只响应最后一个广告的关闭事件
                // 只处理我们标记的广告关闭事件
                if (adView == lastShownAd) {
                    listener.onAdClose(adView)
                    lastShownAd = null // 防止重复触发
                }
            }

            override fun onError(msg: String) {

            }

            override fun onLoadError(adView: IAdView) {

            }

            override fun onSuccess(adView: IAdView) {

            }

            override fun onLoad(adView: IAdView) {

            }

            override fun onSkipped() {

            }

            override fun onNoAd() {

            }

            override fun onTimeOut() {

            }

        }
        // 加载第一个广告
        GMAds.loadAd(activity, position, IAdType.interstitial).observeForever { firstAd ->
            if (firstAd != null) {
                firstAd.setOnShowingListener(internalCloseListener)
                // 立即加载第二个广告
                GMAds.loadAd(activity, position, IAdType.interstitial).observeForever { secondAd ->
                    if (secondAd != null) {
                        secondAd.setOnShowingListener(internalCloseListener)
                        // 先展示第二个广告
                        secondAd.show(activity)
                         // 立即展示第一个广告（可能会覆盖）
                        firstAd.show(activity)
                        lastShownAd = secondAd
                        hasAdShown = true
                    } else {
                        // 第二个加载失败就只展示第一个
                        firstAd.show(activity)
                        lastShownAd = firstAd
                        hasAdShown = true
                        // 这里不再调用onAdLoadFailed，因为已经有广告展示成功
                    }
                }
//                // 先展示第一个广告（如果第二个广告加载较慢）
//                firstAd.show(activity)
//                hasAdShown = true
            } else {
                // 第一个广告加载失败，尝试加载第二个广告
                GMAds.loadAd(activity, position, IAdType.interstitial).observeForever { secondAd ->
                    if (secondAd != null) {
                        secondAd.setOnShowingListener(internalCloseListener)
                        secondAd.show(activity)
                        lastShownAd = secondAd
                        hasAdShown = true
                    } else {
                        // 两个广告都加载失败，才回调onAdLoadFailed
                        if (!hasAdShown) {
                            adLoadListener.onAdLoadFailed(null)
                        }
                    }
                }
            }
        }
    }
    interface AdLoadListener {
        fun onAdLoadFailed(ad: IAdView?) // 广告加载失败
    }

}